/*
 * Funambol is a mobile platform developed by Funambol, Inc.
 * Copyright (C) 2008 Funambol, Inc.
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License version 3 as published by
 * the Free Software Foundation with the addition of the following permission
 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
 * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE
 * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program; if not, see http://www.gnu.org/licenses or write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301 USA.
 *
 * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite
 * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
 *
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU Affero General Public License version 3.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public License
 * version 3, these Appropriate Legal Notices must retain the display of the
 * "Powered by Funambol" logo. If the display of the logo is not reasonably
 * feasible for technical reasons, the Appropriate Legal Notices must display
 * the words "Powered by Funambol".
 */

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>


#import "MainView.h"
#import "MainSingleView.h"


// Forward declaration
@class UIController;


// UIController 
@interface UIController : NSObject {

@private

    UIWindow*                   currentWindow;
    UIView*                     windowView;
    UIView*                     currentView;
#ifndef FUNAMBOL_APP_STORE
    MainView*                   mainView;
#endif
    MainSingleView*             mainSingleView;
    bool                        syncGoing;
    int                         contactsReceived;
    int                         contactsSent;
    int                         contactsToReceive;
    int                         contactsToSend;
    
    bool                        syncAllFlag;
    
    int                         calendarReceived;
    int                         calendarSent;
    int                         calendarToReceive;
    int                         calendarToSend;
    
    int                         notesReceived;
    int                         notesSent;
    int                         notesToReceive;
    int                         notesToSend;
    
    
    UINavigationController*     navigationController;
}

// Public
+ (UIController*) getInstance;

- (id)   init;
#ifndef FUNAMBOL_APP_STORE
- (void) setMainView: (MainView*) val;
#endif
- (void) setMainSingleView: (MainSingleView*) val;



- (void)dealloc;
- (void)syncAll;
- (void) endSyncAll;
- (void)sync:(NSString*) sourcename;
- (void)recoverContacts;
- (void)cleanupContacts;
- (void) endCleanUp ;

- (void)loadSyncConfig:(NSString**) url
              username:(NSString**) username
              password:(NSString**) password;
- (void)saveSettings:(NSString*) url
              username:(NSString*) username
              password:(NSString*) password;

- (void)saveURL:(NSString*) url;
- (void)saveUsername:(NSString*) username;
- (void)savePassword:(NSString*) password;

// Sync contacts listener interface
- (void)receivedAddItem: (NSString*) sourcename;
- (void)receivedDeleteItem: (NSString*) sourcename;
- (void)receivedUpdateItem: (NSString*) sourcename;
- (void)sentAddItem: (NSString*) sourcename;
- (void)sentDeleteItem: (NSString*) sourcename;
- (void)sentUpdateItem: (NSString*) sourcename;
- (void)endSync:(int)res sourcename:(NSString*) sourcename;

- (void)beginSync: (NSString*) sourcename;
- (void)sendingClientItems: (NSString*) sourcename num:(int)num;
- (void)receivingServerItems: (NSString*) sourcename num:(int)num;
#ifndef FUNAMBOL_APP_STORE
- (void) endCleanup:(int)res sname:(NSString*) sname;
- (void)cleanup: (bool)contactFlag calendarFlag: (bool) calendarFlag noteFlag: (bool) noteFlag;
#endif
- (void)stopSyncContacts;

// Private
- (void) sendFinishing: (NSString*)sourcename  isReceiving:(bool) isReceiving;
- (void) updateUIOnItemReceived: (NSString*) sourcename;
- (void) updateUIOnItemSent: (NSString*) sourcename;
- (NSString*) getErrorMessage: (int) errorValue;
@end

